package com.delio.client.pagos.asistencias;

import java.util.Date;

import com.delio.client.idioma.DelioConstants;
import com.delio.client.pagos.horarios.Horarios;
import com.delio.client.util.Utilities;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.binding.FieldBinding;
import com.extjs.gxt.ui.client.binding.FormBinding;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.FieldEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.DatePicker;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormButtonBinding;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.Radio;
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.Time;
import com.extjs.gxt.ui.client.widget.layout.CenterLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;

public class PanelNuevaAsistencia extends FormPanel {
	private DelioConstants k = GWT.create(DelioConstants.class);
	public static Button btnRegistrar;

	private FormBinding formbinding;

	private FormButtonBinding formbuttonbindig;
	private HiddenField<String> id;
	private DatePicker fecha;
	public TextField<String> txtHorasalida;
	public TextField<String> txtHoraentrada;

	private Radio rbFalto;
	private Radio rbAsistio;
	
	private FieldSet fe;
	private FieldSet fs;

	private RadioGroup grupo;
	
	private Date horactual = new Date();
	
	public  Boolean valor=true;
	

	public PanelNuevaAsistencia() {
		super();
		setScrollMode(Scroll.AUTOY);
		setHeading(k.controlasistencia());
		setFrame(true);
		setLabelWidth(120);
		setLabelAlign(LabelAlign.LEFT);

		PanelGridAsistencia.panelnuevaasistencia = this;
		Horarios.panelnuevaasistencia=this;

		formbinding = new FormBinding(this);

		btnRegistrar = new Button(k.registrar(),IconHelper.createPath("images/icons/save_all.png"));
		btnRegistrar.setSize(80, 30);
		btnRegistrar.setEnabled(false);
		formbuttonbindig = new FormButtonBinding(this);
		formbuttonbindig.addButton(btnRegistrar);

		final DateTimeFormat fmt = DateTimeFormat.getFormat("hh:mm a");

		id = new HiddenField<String>();

		fecha = new DatePicker();
		fecha.setValue(horactual);
		fecha.addListener(Events.Select, new Listener<ComponentEvent>() {

			public void handleEvent(ComponentEvent be) {
				if(fecha.getValue().compareTo(new Date())<0){
					DateTimeFormat fmt = DateTimeFormat.getFormat("yyyy-MM-dd");
					String d = fmt.format(fecha.getValue());
					String a="";
					
					if(valor)
					 a = fmt.format(new Date());
					else
					 a=fmt.format(fecha.getValue());
			
					Date fechaActual = fmt.parse(a);
					Date fechaConsulta = fmt.parse(d);
	
					if (fechaConsulta.compareTo(fechaActual) == 0){
						Asistencias.condicion = true;
					    if(!btnRegistrar.isVisible())
					    	btnRegistrar.setVisible(true);
					
					}else{
						Asistencias.condicion = false;
						btnRegistrar.setVisible(false);
					}
					Asistencias.fecha_consulta = fechaConsulta;
					Asistencias.loader.load();
				} else
					Asistencias.store.removeAll();
			}
				
		
		});

		txtHoraentrada = new TextField<String>();
		txtHoraentrada.setFieldLabel(k.horaentrada());
		txtHoraentrada.setHideLabel(true);
		txtHoraentrada.setValue(fmt.format(horactual));
		txtHoraentrada.setAllowBlank(false);
		Utilities.setDigitoshora(txtHoraentrada);

		txtHorasalida = new TextField<String>();
	

		txtHorasalida.setValue(fmt.format(horactual));
		txtHorasalida.setAllowBlank(false);
		txtHorasalida.setHideLabel(true);
		Utilities.setDigitoshora(txtHorasalida);

		rbAsistio = new Radio();
		rbFalto = new Radio();
		rbAsistio.setValue(true);
		rbAsistio.setBoxLabel(k.asistio());
		rbAsistio.addListener(Events.SelectionChange, new Listener<BaseEvent>() {

			@Override
			public void handleEvent(BaseEvent be) {
				
				rbAsistio.setValue(true);
				rbFalto.setValue(false);
				fs.setEnabled(true);
				fe.setEnabled(true);
				
			}
		});

		rbFalto = new Radio();
		rbFalto.setBoxLabel(k.falto());
		rbFalto.addListener(Events.SelectionChange, new Listener<BaseEvent>() {

			@Override
			public void handleEvent(BaseEvent be) {
				rbFalto.setValue(true);
				rbAsistio.setValue(false);
				fs.setEnabled(false);
				fe.setEnabled(false);

			}
		});

	
		
		grupo = new RadioGroup();
		grupo.setFieldLabel(k.estadoasistencia());
		grupo.add(rbAsistio);
		grupo.add(rbFalto);
		
	
		
		fe = new FieldSet();
		fe.setHeading(k.horaentrada());
		fe.setLayout(new FormLayout(LabelAlign.TOP));
		fe.setHeight(100);
		fe.setCollapsible(false);
		fe.setLayout(new CenterLayout());

		LayoutContainer lc0 = new LayoutContainer(new FormLayout());
		lc0.add(txtHoraentrada, new FormData("50"));
		fe.add(lc0);

		fs = new FieldSet();
		fs.setHeading(k.horasalida());
		fs.setLayout(new FormLayout(LabelAlign.TOP));
		fs.setCollapsible(false);
		fs.setHeight(100);
		fs.setLayout(new CenterLayout());

		LayoutContainer lc = new LayoutContainer(new FormLayout());
		lc.add(txtHorasalida, new FormData("50"));
		fs.add(lc);

		grupo.addListener(Events.Change, new Listener<FieldEvent>() {
			@Override
			public void handleEvent(FieldEvent be) {
				validarRadio();
			}
		});

		
		add(fecha, new FormData("100%"));
		add(grupo, new FormData("100%"));
		add(fe, new FormData("100%"));
		add(fs, new FormData("100%"));
	
		btnRegistrar.addSelectionListener(new SelectionListener<ButtonEvent>() {

			@Override
			public void componentSelected(ButtonEvent ce) {
				if (rbFalto.getValue())
					save();
				else if(rbAsistio.getValue()){ 
					if (Utilities.validarHora(txtHoraentrada)|| Utilities.validarHora(txtHorasalida))
					    save();
				    else
					   MessageBox.alert(k.sistemaDelio(), k.horaincorrecta(), null);
					}
			}
		});

		addButton(btnRegistrar);
		setButtonAlign(HorizontalAlignment.CENTER);
		//setStore(Asistencias.store);
		setValidar(false);
		
		
	
	}

	public void setStore(ListStore<BeanModel> store) {

		formbinding.addFieldBinding(new FieldBinding(id, "id"));
		formbinding.addFieldBinding(new FieldBinding(txtHoraentrada,
				"horaentrada"));
		formbinding.addFieldBinding(new FieldBinding(txtHorasalida,
				"horasalida"));
		formbinding.setStore(store);
		
		
		

	}

	@Override
	public void reset() {
		id.clear();
		txtHoraentrada.clear();
		txtHorasalida.clear();

		PanelGridAsistencia.grid.getSelectionModel().deselectAll();
		unbind();

	}

	public void bind(BeanModel selectedModel) {
		formbinding.bind(selectedModel);
		if(Horarios.contrato_id!=null)
		   Horarios.getHorario();
		

	}

	public void unbind() {
		formbinding.unbind();

		setHeading(k.nuevaAsistencia());
	}

	private void save() {
		Date date = fecha.getValue();
		Integer estadoasistencia_id = 0;

		Asistencia as = new Asistencia();
		as.setFecha(date);

		if (rbAsistio.getValue()) {
			estadoasistencia_id = 1;
			String horaentrada = txtHoraentrada.getValue();
			String horasalida = txtHorasalida.getValue();

			Time timeEntrada = new Time(horactual);
			timeEntrada.setHour(Utilities.getHour(horaentrada));
			timeEntrada.setMinutes(Utilities.getMinute(horaentrada));

			Time timeSalida = new Time(horactual);
			timeSalida.setHour(Utilities.getHour(horasalida));
			timeSalida.setMinutes(Utilities.getMinute(horasalida));

			as.setHoraentrada(timeEntrada.getDate());
			as.setHorasalida(timeSalida.getDate());
		} else if (rbFalto.getValue())
			estadoasistencia_id = 2;

		as.setEstadoasistencia_id(estadoasistencia_id);

		Asistencias.Save(as);
		Asistencias.panelnuevaasistencia = this;

	}

	public void setValidar(Boolean valor) {

		fs.setEnabled(valor);
		fe.setEnabled(valor);
		grupo.setEnabled(valor);
		if (valor) {
			formbuttonbindig.addButton(btnRegistrar);
			validarRadio();
		} else {
			formbuttonbindig.removeButton(btnRegistrar);
			btnRegistrar.setEnabled(false);
		}

	}

	private void validarRadio() {
		if (rbAsistio.getValue()) {
			fs.setEnabled(true);
			fe.setEnabled(true);
		} else if (rbFalto.getValue()) {
			fs.setEnabled(false);
			fe.setEnabled(false);
		}
	}
	
	public void setRadio(Integer id ){
		if(id==1){
		rbAsistio.setValue(true);
		rbFalto.setValue(false);
		}else if(id==2){
			rbAsistio.setValue(false);
			rbFalto.setValue(true);
		}
		
	}
	
	
}

// /comprara fechas

// if (fechaConsulta.compareTo(fechaActual) == 0)
// System.out.println("condicion:  =");
// if (fechaConsulta.compareTo(fechaActual) < 0)
// System.out.println("condicion:  <");
// if (fechaConsulta.compareTo(fechaActual) > 0)
// System.out.println("condicion:  >");
//
// Asistencias.condicion=true;
